#ifndef __LIST_H_
#define __LIST_H_


#include "utils.h"

typedef struct _Node {
	struct _Node *next, *prev;
	void *object;
} Node;

typedef struct {
	Node *head, *tail;
} List;

List *create_list();

void add_list(List *list, void *data);
int remove_list(List *list, void *data);
void remove_list_from_node(Node *node);

void merge_list(List *list1, List *list2);
bool is_contains_list(List *list, void *data);

Node *begin(List *list);
Node *end(List *list);
Node *rbegin(List *list);

void destroy_list(List *list);
List *reset_list(List *list);
int is_empty_list(List *list);

#endif